In [2]:
%load_ext tikzmagic

데이터 사이언스 학습 안내

데이터 사이언스는 다양한 분야의 지식과 기술을 필요로 하는 복합적인 학문이다. 데이터 사이언스에서 필요로 하는 지식과 기술은 기초적인 수학 이론, 컴퓨터 관리 프로그래밍 지식, 데이터 분석 이론, 그리고 분석 및 예측을 하고자 하는 해당 분야에 대한 전문 지식, 이렇게 네 가지로 크게 나눌 수 있다.

여기에서는 데이터 분석 이론을 중심으로 설명하지만 데이터 분석에 필요한 최소한의 기초 수학과 프로그래밍 기술, 그리고 전처리 기술도 같이 소개한다.

도표 1.1

데이터 사이언스에 필요한 지식

  • 기초 수학 이론

    • 선형대수
    • 미분과 적분
    • 최적화
    • 확률론
  • 컴퓨터 관리 및 프로그래밍 기술

    • 리눅스 운영체제 사용법
    • 프로그래밍 언어
    • 데이터베이스 시스템
    • 병렬처리, 가상화, 클라우드 사용법
  • 데이터 분석 이론

    • 확률 모형
    • 검정 및 추정
    • 회귀 분석과 분류, 클러스터링
  • 해당 분야에 대한 전문 지식

    • 해당 분야의 정보를 이해하고 분석 결과가 올바른지를 판단할 수 있는 능력
    • 이미지 처리, 음성/음향 처리, 텍스트 처리 등의 자료 전처리 기술

다음 학습안내도는 위에서 말한 다양한 지식과 기술이 어떻게 연관되어 있으며 어떤 순서로 공부해야 하는지를 알려준다. 이는 하나의 예시일 뿐, 모든 사람이 반드시 여기에서 알려주는 순서와 방법을 따를 필요는 없다. 하지만 처음으로 데이터 사이언스를 공부하고자 하는 분들에게는 이 학습안내도가 큰 도움이 되리라고 생각한다.

학습안내도를 보는 방법은 다음과 같다.

  • 전체 내용은 하나의 절을 기본 학습단계로 한다.
  • 아래쪽 학습단계는 윗쪽 학습단계의 내용을 알아야 학습할 수 있다. 이미 알고 있는 내용인 경우에는 생략할 수 있다.
  • 오른쪽 학습단계는 왼쪽 학습단계의 내용을 알아야 학습할 수 있다. 특히 모든 수학 이론은 거기에 해당하는 파이썬 패키지를 사용하여 프로그래밍하며 학습한다. 만약 왼쪽 학습단계의 내용을 이미 알고 있다면 바로 오른쪽 학습단계를 공부하면 된다.
  • 별(*) 표시가 있는 부분은 고급 주제이다. 시간이 부족한 경우에는 이 부분을 생략하고 나중에 학습해도 된다.

그림 1.1

데이터 사이언스 학습안내도


In [13]:
%%tikz --size 1200,3600 -p kotex,calc,flowchart -l arrows -e utf-8

\tikzset{
    y=-0.8cm,
    >=stealth,
    mychapter/.style = {draw, minimum height=2em, minimum width=18em, fill=gray!20, font=\sffamily \small},
    chapter/.style = {draw, minimum height=1.8em, minimum width=16em, font=\sffamily \small}    
}

\pgfmathsetmacro{\colcenter}{10.5}
\pgfmathsetmacro{\colone}{0}
\pgfmathsetmacro{\coltwo}{0}
\pgfmathsetmacro{\colthree}{7}
\pgfmathsetmacro{\colfour}{14}
\pgfmathsetmacro{\colfive}{21}
\newcounter{mychapter}
\newcounter{mysection}
\newcounter{ypos}

\draw[help lines, color=white] (-4,-5) grid (25,15);

\stepcounter{mychapter} \setcounter{ypos}{-4}
\node[mychapter] at (\colcenter, \theypos) {\themychapter : 데이터 사이언스의 소개};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colcenter, \theypos) {\themysection : 데이터 사이언스 학습 안내};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colcenter, \theypos) {\themysection : 데이터 분석이란};

\setcounter{ypos}{0}
\node[font=\sffamily] at (\coltwo, \theypos) {1: 프로그래밍 기술};
\node[font=\sffamily] at (\colthree, \theypos) {2: 수학이론};
\node[font=\sffamily] at (\colfour, \theypos) {3: 통계분석};
\node[font=\sffamily] at (\colfive, \theypos) {4: 머신러닝};

\stepcounter{mychapter} \setcounter{ypos}{2}
\node[mychapter] at (\colone, \theypos) {\themychapter : 데이터 분석 환경};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : 데이터 분석을 위한 환경 꾸미기};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : 도커와 리눅스 사용법};

\stepcounter{mychapter} \setcounter{ypos}{5}
\node[mychapter] at (\coltwo, \theypos) {\themychapter : 파이썬 프로그래밍 시작하기};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : 파이썬 설치와 사용법};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : 파이썬 기초 문법};

\stepcounter{mychapter} \setcounter{ypos}{8}
\node[mychapter] at (\coltwo, \theypos) {\themychapter : 파이썬 데이터 분석};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : NumPy을 사용한 벡터와 행렬연산};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : Pandas를 사용한 데이터 탐색};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : Dask를 사용한 빅데이터 탐색${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : Matplotlib를 사용한 시각화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : Seaborn을 사용한 고급 시각화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : Konlpy을 사용한 문서처리};

\stepcounter{mychapter} \setcounter{ypos}{8}
\node[mychapter] at (\colthree, \theypos) {\themychapter : NumPy로 공부하는 선형 대수 기초};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 벡터와 행렬};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 연립방정식과 역행렬};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 선형대수와 해석기하};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 고유분해와 특이값 분해${}^{\ast}$};



In [14]:
%%tikz --size 1200,3600 -p kotex,calc,flowchart -l arrows -e utf-8

\tikzset{
    y=-0.8cm,
    >=stealth,
    mychapter/.style = {draw, minimum height=2em, minimum width=18em, fill=gray!20, font=\sffamily \small},
    chapter/.style = {draw, minimum height=1.8em, minimum width=16em, font=\sffamily \small}    
}

\pgfmathsetmacro{\colcenter}{10.5}
\pgfmathsetmacro{\colone}{0}
\pgfmathsetmacro{\coltwo}{0}
\pgfmathsetmacro{\colthree}{7}
\pgfmathsetmacro{\colfour}{14}
\pgfmathsetmacro{\colfive}{21}
\newcounter{mychapter}
\newcounter{mysection}
\newcounter{ypos}

\draw[help lines, color=white] (-4,15) grid (25,35);

\setcounter{mychapter}{5}
\setcounter{mysection}{16}
\setcounter{ypos}{-2}

\stepcounter{mysection} \setcounter{ypos}{16}
\node[chapter] at (\coltwo, \theypos) {\themysection : SymPy를 이용한 심볼연산};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\coltwo, \theypos) {\themysection : SciPy를 이용한 과학기술연산};

\stepcounter{mychapter} \setcounter{ypos}{15}
\node[mychapter] at (\colthree, \theypos) {\themychapter : 파이썬으로 공부하는 미적분과 최적화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 미분과 적분};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 행렬의 미분};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 최적화};

\stepcounter{mychapter} \setcounter{ypos}{19}
\node[mychapter] at (\colthree, \theypos) {\themychapter : 확률론 기초};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 확률의 정의와 특성};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 결합확률과 조건부확률};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 베이즈 정리 };

\stepcounter{mychapter} \setcounter{ypos}{23}
\node[mychapter] at (\colthree, \theypos) {\themychapter : SciPy로 공부하는 확률변수};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 난수발생과 카운팅};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 분포와 모멘트};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 확률변수와 확률밀도함수};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : SciPy의 확률분석기능};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 베르누이 분포와 이항 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 정규 분포와 스튜던트 t 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 카이제곱 분포와 F 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 베타 분포와 감마 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 카테고리 분포와 다항 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 디리클레 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 다변수 가우시안 정규 분포};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 결합확률};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colthree, \theypos) {\themysection : 독립과 상관관계};



In [15]:
%%tikz --size 1200,3600 -p kotex,calc,flowchart -l arrows -e utf-8

\tikzset{
    y=-0.8cm,
    >=stealth,
    mychapter/.style = {draw, minimum height=2em, minimum width=18em, fill=gray!20, font=\sffamily \small},
    chapter/.style = {draw, minimum height=1.8em, minimum width=16em, font=\sffamily \small}    
}

\pgfmathsetmacro{\colcenter}{10.5}
\pgfmathsetmacro{\colone}{0}
\pgfmathsetmacro{\coltwo}{0}
\pgfmathsetmacro{\colthree}{7}
\pgfmathsetmacro{\colfour}{14}
\pgfmathsetmacro{\colfive}{21}
\newcounter{mychapter}
\newcounter{mysection}
\newcounter{ypos}

\draw[help lines, color=white] (-4,36) grid (25,60);

\setcounter{mychapter}{8}
\setcounter{mysection}{37}
\setcounter{ypos}{-2}

\stepcounter{mychapter} \setcounter{ypos}{37}
\node[mychapter] at (\colone, \theypos) {\themychapter : 통계분석  머신러닝 프로그래밍};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Statsmodels 패키지 소개};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Scikit-Learn 패키지 소개};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Scikit-Learn의 샘플 데이터};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Scikit-Learn의 전처리 기능};

\stepcounter{mychapter} \setcounter{ypos}{37}
\node[mychapter] at (\colfour, \theypos) {\themychapter : Statsmodels로 공부하는 회귀분석};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 검정과 유의확률};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 최대우도 모수추정};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 베이지안 모수추정};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 선형회귀분석의 소개};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 아웃라이어와 레버리지};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 확률론적 선형회귀모형};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 분산분석};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 입력변수가 카테고리값인 경우};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 예측성능의 진단과 비교};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 다항회귀와 과최적화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 교차검증};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 정규화와 모형 최적화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 로지스틱 회귀분석};

\stepcounter{mychapter} \setcounter{ypos}{51}
\node[mychapter] at (\colfive, \theypos) {\themychapter : Scikit-Learn을 사용한 머신러닝};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 분류의 기초};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 분류 성능을 평가하는 };
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : QDA와 나이브 베이즈 모형};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 의사 결정 나무};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 퍼셉트론과 서포트 벡터 머신};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 앙상블 방법};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 모형 최적화};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 주성분 분석${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 클러스터링${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 추천시스템${}^{\ast}$};



In [16]:
%%tikz --size 1200,3600 -p kotex,calc,flowchart -l arrows -e utf-8

\tikzset{
    y=-0.8cm,
    >=stealth,
    mychapter/.style = {draw, minimum height=2em, minimum width=18em, fill=gray!20, font=\sffamily \small},
    chapter/.style = {draw, minimum height=1.8em, minimum width=16em, font=\sffamily \small}    
}

\pgfmathsetmacro{\colcenter}{10.5}
\pgfmathsetmacro{\colone}{0}
\pgfmathsetmacro{\coltwo}{0}
\pgfmathsetmacro{\colthree}{7}
\pgfmathsetmacro{\colfour}{14}
\pgfmathsetmacro{\colfive}{21}
\newcounter{mychapter}
\newcounter{mysection}
\newcounter{ypos}

\draw[help lines, color=white] (-4,60) grid (25,75);

\setcounter{mychapter}{11}
\setcounter{mysection}{64}
\setcounter{ypos}{-2}

\stepcounter{mychapter} \setcounter{ypos}{62}
\node[mychapter] at (\colfive, \theypos) {\themychapter : 딥러닝};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 커널 서포트 벡터 머신};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 신경망 모형};

\setcounter{ypos}{63}
\stepcounter{mysection} \stepcounter{ypos} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Theano 패키지${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Tensor-Flow 패키지};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colone, \theypos) {\themysection : Keras 패키지};

\setcounter{ypos}{64}
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : CNN};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 확률론적 언어모형${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : 단어 임베딩과 word2vec${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfive, \theypos) {\themysection : RNN${}^{\ast}$};

\stepcounter{mychapter} \setcounter{ypos}{69}
\node[mychapter] at (\colfour, \theypos) {\themychapter : Statsmodels로 시계열 분석하기${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 확률 과정};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 추세 추정};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : ARMA 모형};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : ARIMA 모형};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 상태 공간 모형${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 칼만 필터${}^{\ast}$};
\stepcounter{mysection} \stepcounter{ypos}
\node[chapter] at (\colfour, \theypos) {\themysection : 히든 마코프 모형${}^{\ast}$};


1장은 데이터 사이언스란 것이 무엇이며 어떻게 공부해야 하는지에 대한 안내이다.

2장에서는 머신러닝 프로그래밍을 하기 위한 컴퓨팅 환경을 구축한다. 최신 머신러닝 프로그래밍은 리눅스 운영체제에서 안정적으로 돌아가기 때문에 우선 간단한 리눅스 사용법을 소개한다. 또 윈도우즈나 매킨토시 사용자도 도커(Docker) 가상환경에서 리눅스를 쓸 수 있도록 도커에 대해 간단히 설명한다.

3장에서는 머신러닝을 위한 파이썬 프로그래밍 언어를 설치하고 사용하는 방법을 공부한다. 파이썬 프로그래밍 언어를 단시간에 자세히 설명하는 것은 불가능하므로 여기에서는 머신러닝을 위한 최소한의 내용만을 설명한다. 그렇다고 여기 있는 내용만을 공부해서 머신러닝 시스템을 쉽게 구현할 수 있다는 뜻은 아니다. 모든 소프트웨어는 프로그래밍 언어에 대해 숙달한 사람만이 제대로 구현할 수 있다는 점을 명심해야 한다.

2장과 3장의 내용은 전산을 전공하거나 개발 업무를 하고 있는 사람이라면 이미 알고 있거나 쉽게 익힐 수 있는 내용이므로 생략할 수 있다.

4장은 파이썬을 사용하여 데이터를 분석하는 방법을 이야기한다. 파이썬 프로그래밍 언어를 사용하고 있는 개발자도 데이터 분석이 아닌 단순 스크립트(script)용으로 파이썬을 쓰고 있다면 이 장의 내용을 반드시 숙지하고 넘어가야 한다. 이 장에서 설명하는 파이썬 패키지들은 통계분석이나 머신러닝이 아닌 단순한 데이터분석에서 매우 유용하게 사용된다.

5장부터 8장까지는 머신러닝에 필요한 최소한의 수학을 다루고 있다. 이 부분은 반드시 읽고 다음으로 진행하기를 권장한다.

데이터 분석 혹은 머신러닝 방법론은 전산학과의 자료구조나 알고리즘 과목에서 이야기하는 알고리즘보다 훨씬 복잡한 상위의 개념이므로 알고리즘 과목을 공부하듯이 방법론 자체만 반복해서 본다고 쉬이 이해할 수 있는 것이 아니다. 처음 공부하는 사람에게는 굳이 수학을 공부하고 가는 것이 쓸데없이 멀리 돌아가는 것처럼 보일지도 모른다. 하지만 수학적 개념과 어휘에 익숙해지고 나면 다음에 나올 복잡한 방법론을 쉽게 이해할 수 있는 능력을 가질 수 있다. 반대로 이 단계를 거치지 않는다면 추후 데이터 분석 혹은 머신러닝을 공부할 때 더 오랜 시간을 끙끙대며 고민하게 될 것이다.

5장은 선형대수에 대한 내용이다. 선형대수는 데이터를 처리하는 방법을 서술하는 어휘이다. 우리는 알고 있는 어휘가 풍부할수록 복잡하고 다양한 추상적 개념을 쉽게 설명하거나 이해할 수 있다. 마찬가지로 선형대수의 어휘에 익숙해지면 데이터 처리방법을 간결하게 서술할 수 있다.

선형대수는 고등학교 수학과정과 대학교 기초과정에서 일부 다루고 있지만 여기에서는 NumPy 패키지를 사용하여 실제 프로그램으로 구현하는 것을 목표로 하므로 이론적인 내용을 알고 있는 사람도 반드시 프로그램으로 구현하는 것을 연습해야 한다.

6장에서는 미적분과 최적화에 대해 설명한다. 데이터 분석은 고수준의 미적분 지식을 필요로 하지 않는다. 따라서 미분과 적분을 한번도 공부하지 않은 사람도 쉽게 공부할 수 있으므로 걱정할 필요가 없다.

7장에서는 확률의 정의와 특징을 다룬다. 확률은 일상생활에서도 많이 사용되는 개념이지만 확률의 수학적인 정의에 대해서는 의외로 많은 사람들이 알지 못하고 있다. 단순한 컴퓨터 알고리즘과 복잡한 데이터분석 방법론의 차이는 핵심 이론이 확률론에 기반하는가 아닌가에 있다. 따라서 전통적인 개발자가 아닌 데이터 분석가의 업무를 하고 싶다면 확률론은 가장 중요한 지식이다.

8장은 확률변수라는 개념을 소개한다. 선형대수가 데이터를 처리하는 방법을 설명하는 어휘라면 확률변수는 데이터가 가진 특성을 설명하는 어휘이다. 8장에서는 현실에서 나타날 수 있는 다양한 데이터의 형태와 특성, 그리고 이에 해당하는 확률변수 모형들을 소개한다.

9장에서는 본격적인 데이터 분석 및 머신러닝을 공부하기 위해 가장 널리 사용되는 파이썬 패키지인 Scikit-Learn과 Statsmodels를 소개한다.

10장은 전통적 통계분석이라고도 불리는 검정 및 회귀분석에 대해 설명한다. 회귀분석은 주어진 데이터를 사용하여 실수 값을 가지는 결과 데이터를 예측하는 분석이다. 10장에서 가장 중요한 것은 과최적화와 정규화, 교차검증, 모형최적화의 개념을 익히는 것이다.

11장에서는 Scikit-Learn 패키지를 사용하여 분류 모형과 클러스터링(clustering), 추천시스템 등의 머신러닝 기법을 공부한다. 분류 모형은 사진을 보고 사진 속 인물의 이름을 찾거나 음악을 듣고 어떤 음악인지를 찾아내는 등 카테고리값을 가지는 결과 데이터를 예측하는 모형이다.

12장은 최근 급속히 떠오르고 있는 딥러닝(deep learning)을 소개한다. 과거의 회귀분석 혹은 분류 모형은 대부분 입력 자료의 선형조합을 이용하는 선형모형이다. 딥러닝은 입력자료와 예측하고자 하는 출력자료간의 비선형적인 관계를 모형화하려는 방법론으로 신경망 구조가 가장 널리 사용된다. 과거에는 막대한 계산량과 느린 학습 속도로 인해 널리 사용되지 못했지만 최근 클라우드 컴퓨팅, GPU 등의 급속한 발전으로 다양한 분야에서 활발히 성과를 내고 있다.

13장은 시계열분석을 소개한다. 시계열 분석 모형은 실제로는 실무에서 가장 많이 활용되는 모형임에도 불구하고 회귀분석 등의 기초적인 분석 이론을 알고 있어야 제대로 이해할 수 있기 때문에 데이터 분석을 공부하는 대부분의 사람들이 쉽게 접근하지 못하는 분야이다. 여기에서는 가장 단순한 선형 시계열 모형인 ARMA 모형과 ARIMA 모형을 가르친다. 또한 고급 주제로 칼만 필터나 히든 마코프 모형의 개념도 소개한다.